<?php
declare(strict_types=1);

namespace longbingcore\heepay;



class WeixinPay{

    static protected $uniacid;

    protected $appid;

    protected $draw_cash_type;

    public function __construct($uniacid)
    {
        self::$uniacid = $uniacid;

    }



    public function pay($number){


//获取时间戳
        $currentTime = date("YmdHis");

        /*
          meta_option处理；
           注：1.is_guarantee=1代表分润单（选填） 商户设置成一般，接口参数才好使，不调分润资金不会结算，需要base64，再urlencode（不需要参与签名）
              2.如果需要返回JSAPI参数自行拉起支付  则加入{"wx_openid":"用户openid","wx_sub_appid":"公众号appid"}；接入之前先对接群内联系汇元运营配置公众号appid；
        */

        $String = array(
            "is_guarantee" => '1',
        );
        $jsonString =json_encode($String,JSON_UNESCAPED_UNICODE);
//        echo 'meta_option的原始值'.$jsonString;
//        echo "<br/><hr>";
        $encodedJsonString = iconv('utf-8', 'gbk', $jsonString);
        $Newmeta_option = urlencode(base64_encode($encodedJsonString));


//定义参数值
        $version = '1';//版本号
        $is_phone = '1';//是否使用手机触屏版，1=是
        $is_frame = '1';//1=是
        $pay_type = '30';//支付类型
        $agent_id = '2208181';//商户编号
      //  $ref_agent_id = '';//二级商户号（集团商户模式传参），传了必须参与签名放在key后面
        $agent_bill_id = $number;//商户系统内部的订单号（要保证唯一）
        $agent_bill_time = $currentTime;//提交单据的时间yyyyMMddHHmmss
        $pay_amt = '0.01';//订单总金额
        $notify_url = 'https://';//异步通知地址
        $return_url = 'https://';//支付后返回的商户显示页面
        $user_ip = '127_127_12_12';//用户真实的IP 127_127_12_12
        $goods_name = '测试';//商品名称，不能为空（不参加签名）
        $goods_num = '1';//产品数量（不参加签名）
        $remark = '测试';//商户自定义，原样返回,可以为空。（不参加签名）
        $goods_note = '测试';//支付说明，（不参加签名）
        $expire_time = '10';//订单过期相对时间，单位分钟，最低1分钟，最高4320分钟。
        $meta_option = $Newmeta_option;//is_guarantee=1代表分润单（选填） 如果需要分润，此参数必填；不调分润资金不会结算，需要base64，再urlencode（不需要参与签名）
        $key = '651886F030134F848F548A12';//密钥

//请求参数中，中文需要GBK格式  URLencode编码
        $GBKgoods_name = iconv('UTF-8', 'GBK', $goods_name);
        $New_goods_name = urlencode($GBKgoods_name);

        $GBKremark = iconv('UTF-8', 'GBK', $remark);
        $New_remark = urlencode($GBKremark);

        $GBKgoods_note = iconv('UTF-8', 'GBK', $goods_note);
        $New_goods_note = urlencode($GBKgoods_note);

// 请求参数（使用 & 符号拼接）注：如果有子商户则子商户字段传值。

        if (empty($ref_agent_id)){
            $data = "version=$version&agent_id=$agent_id&agent_bill_id=$agent_bill_id&agent_bill_time=$agent_bill_time&pay_type=$pay_type&pay_amt=$pay_amt&notify_url=$notify_url&return_url=$return_url&user_ip=$user_ip&key=$key";
//            echo '待加密数据-------------->'.$data;
//            echo "<br/><hr>";
            $sign = md5($data);
//            echo '加密后数据'.$sign;
//            echo "<br/><hr>";
            $param = "version=$version&agent_id=$agent_id&is_phone=$is_phone&is_frame=$is_frame&agent_bill_id=$agent_bill_id&agent_bill_time=$agent_bill_time&pay_type=$pay_type&pay_amt=$pay_amt&notify_url=$notify_url&return_url=$return_url&user_ip=$user_ip&sign=$sign&goods_name=$New_goods_name&goods_num=$goods_num&remark=$New_remark&goods_note=$New_goods_note&meta_option=$meta_option";
//            echo '待请求参数-------------->'.$param;
//            echo "<br/><hr>";
        }else{
            $data = "version=$version&agent_id=$agent_id&agent_bill_id=$agent_bill_id&agent_bill_time=$agent_bill_time&pay_type=$pay_type&pay_amt=$pay_amt&notify_url=$notify_url&return_url=$return_url&user_ip=$user_ip&key=$key&ref_agent_id=$ref_agent_id";
            echo '待加密数据-------------->'.$data;
            echo "<br/><hr>";
            $sign = md5($data);
            echo '加密后数据'.$sign;
            echo "<br/><hr>";
            $param = "version=$version&agent_id=$agent_id&is_phone=$is_phone&is_frame=$is_frame&agent_bill_id=$agent_bill_id&agent_bill_time=$agent_bill_time&pay_type=$pay_type&pay_amt=$pay_amt&notify_url=$notify_url&return_url=$return_url&user_ip=$user_ip&sign=$sign&goods_name=$New_goods_name&goods_num=$goods_num&remark=$New_remark&goods_note=$New_goods_note&ref_agent_id=$ref_agent_id&meta_option=$meta_option";
            echo '待请求参数-------------->'.$param;
            echo "<br/><hr>";
        }


//请求地址
        $url = 'https://pay.heepay.com/Payment/Index.aspx';

// 构建请求上下文
        $options = array(
            'http' => array(
                'method' => 'POST',
                'header' => 'Content-Type: application/x-www-form-urlencoded',
                'content' => $param
            )
        );
        $context = stream_context_create($options);

// 发送 POST 请求
        $response = file_get_contents($url, false, $context);

        dump(1,$response);exit;
        if ($response === false) {
            echo 'POST request failed';
        } else {
            $responsed=iconv('GBK', 'UTF-8', $response);
            echo $responsed;
        }
    }






}